import axios, { AxiosInstance, AxiosResponse } from 'axios';

// 类型定义  
const CONTENT_TYPE = 'application/json;charset=utf-8';

function createAxiosInstance(): AxiosInstance {
  const nodeServiceUrl = import.meta.env.VITE_APP_NODE_SERVICE_URL;
  if (!nodeServiceUrl) {
    throw new Error('VITE_APP_NODE_SERVICE_URL environment variable is not set.');
  }

  const service = axios.create({
    baseURL: nodeServiceUrl,
    timeout: 5000,
    headers: {
      'Content-Type': CONTENT_TYPE,
    },
  });

  return service;
}

function setupRequestInterceptors(axiosInstance: AxiosInstance) {
  axiosInstance.interceptors.request.use(
    (config: any) => {
      // 在这里可以添加一些通用的请求头，比如token  
      // config.headers['Authorization'] = token;  
      return config;
    },
    (error: any) => {
      console.error('Request Interceptor Error:', error);
      return Promise.reject(error);
    }
  );
}

type ApiError = {
  message: string;
  status?: number;
  // 可以添加其他你需要的属性  
};

function setupResponseInterceptors(axiosInstance: AxiosInstance) {
  axiosInstance.interceptors.response.use(
    (response: AxiosResponse) => response.data,
    (error: { response?: AxiosResponse<ApiError>; request?: any; message?: string }) => {
      if (error.response) {
        // 请求已发出，服务器也响应了状态码，但状态码不在2xx范围内  
        console.error('Server Error:', error.response.data);
        return Promise.reject(error.response.data);
      } else if (error.request) {
        // 请求已发出，但没有收到任何响应  
        console.error('Request Error:', error.request);
        return Promise.reject({ message: 'Request failed', status: 0 });
      } else {
        // 发送请求时发生了些事情，但并未触发错误处理  
        console.error('Error:', error.message);
        return Promise.reject({ message: error.message, status: 0 });
      }
    }
  );
}

const service = createAxiosInstance();
setupRequestInterceptors(service);
setupResponseInterceptors(service);

export default service;